module app {
    /**
     * 图层管理器
     * 
     * 将整个游戏界面分为了: 
     * 1: 天空图图层
     * 2: 场景图层，场景图层一次只能载入一个场景，新场景的载入将会remove之前所有的场景
     * 3: 面板图层，例如背包面板、人物属性面板等
     * 4：加载提示层，如场景加载提示、网络加载提示等，通常背景置灰，且锁定操作
     * 
     * 可以按照需要继续添加更多的图层，如特效层等。
     * 
     * @author wjc133
     */
    export class LayerManager extends eui.UILayer {
        private skyLayer: eui.UILayer = new eui.UILayer;
        private sceneLayer: eui.UILayer = new eui.UILayer;
        private panelLayer: eui.UILayer = new eui.UILayer;
        private loadLayer: eui.UILayer = new eui.UILayer;

        private static _instance: LayerManager;

        //构造方法
        public constructor() {
            super();
            this.init();
        }

        //游戏容器管理器单例
        public static getInstance(): LayerManager {
            if (!this._instance)
                this._instance = new LayerManager();
            return this._instance;
        }

        /**
         * 载入天空图
         */
        public loadSky(child: egret.DisplayObject) {
            this.skyLayer.removeChildren();
            this.skyLayer.addChild(child);
        }

        /**
         * 载入场景
         */
        public loadScene(child: egret.DisplayObject) {
            this.sceneLayer.removeChildren();
            this.sceneLayer.addChild(child);
        }

        /**
         * 打开面板
         */
        public openPanel(child: egret.DisplayObject) {
            this.panelLayer.addChild(child);
        }

        /**
         * 关闭面板
         */
        public closePanel(panel: egret.DisplayObject) {
            this.panelLayer.removeChild(panel);
        }

        /**
         * 展示遮罩层，未覆盖区域将显示灰色
         */
        public showMask(mask: egret.DisplayObject) {
            this.loadLayer.addChild(mask);
        }
        /**
         * 隐藏指定遮罩层
         */
        public hiddenMask(mask: egret.DisplayObject) {
            this.loadLayer.addChild(mask);
        }

        /**
         * 清空遮罩层
         */
        public clearMask() {
            this.loadLayer.removeChildren();
        }

        //初始化场景类
        public init(): void {
            this.touchThrough = true;
            this.skyLayer.touchThrough = true;
            this.sceneLayer.touchThrough = true;
            this.panelLayer.touchThrough = true;
            this.loadLayer.touchThrough = true;
            this.addChild(this.skyLayer);
            this.addChild(this.sceneLayer);
            this.addChild(this.panelLayer);
            this.addChild(this.loadLayer);
        }
    }
}